python使用pd.read

您所在的位置:网站首页 python read csv路径 python使用pd.read

python使用pd.read

2023-09-20 19:28| 来源: 网络整理| 查看: 265

问题描述:

在使用pd.read_csv()读取表格数据时,有"encoding="参数用来描述表格数据采用的编码方式,比较常用的有utf-8,但有时候还是会报错。示例如下:

import pandas as pd file_path = "oracle_log.csv" data = pd.read_csv(file_path, encoding='utf-8')

报错内容为:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

说明’utf-8’ 不能解码0xc8。

但如何确定表格的编码方式呢?

解决办法:

表格的编码方式存在两种情况,一种是表格整体以一种方式编码,另一种是表格中存在多种编码方式。

对于情况一:

使用记事本打开csv文件,红框所示即csv文件的编码方式。

在这里插入图片描述

则更改为data = pd.read_csv(file_path, encoding='ANSI')

一般地,测试无报错,则说明表格整体以单一方式编码。

对于情况二:

特殊地,上述情况仍然有报错。则测试是否存在多种编码方式:

f = open(file_path,"rb")# 二进制格式读文件 i = 0 while True: i += 1 line = f.readline() # 按行读取 if not line: break else: try: line.decode('ANSI') except: # 打印出不能通过'ANSI'方式解码的数据行 print(i) print(str(line))

输出内容示例:

38999 # 代表csv文件的第38999行 b'36:50.5,59107,1521,6,49:35.9,136.6.5.43,192.168.181.198,ODSQUERY,\xff\xff\xff\xff\xff\xff,,chenwenfeng,,PLSQLDev,,,,,,,,,,\r\n' # 代表不能通过'ANSI'方式解码的数据行内容

如何确定报错的这一行数据的编码方式:

使用python库chardet检测编码方式(对单行数据检测比较有效)

import chardet # import失败则 pip install chardet error_line = b'36:50.5,59107,1521,6,49:35.9,136.6.5.43,192.168.181.198,ODSQUERY,\xff\xff\xff\xff\xff\xff,,chenwenfeng,,PLSQLDev,,,,,,,,,,\r\n' print(chardet.detect(error_line))

输出内容:

{'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}

经测试,对上述报错行使用error_line.decode('ISO-8859-1'),无报错。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3